package com.tanjun.mallservice.apiservice.request.plu;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.tanjun.common.annotation.Edit;
import com.tanjun.common.utils.PathDeserializer;
import com.tanjun.mallservice.apiservice.enums.plu.PluTypeEnum;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import java.util.List;

/**
 * 新增或者修改商品信息VO
 */
@Data

public class MallPluVo {
    /**
     * 商品id（新增的时候为null）
     */
    @NotNull(groups = {Edit.class})
    private Long pluId;

    /**
     * 商品编码
     */
    @NotNull(message = "商品编码不能为空")
    @Length(max = 50, message = "商品编码长度不能超过50")
    private String pluCode;

    /**
     * 商品名称
     */
    @NotNull(message = "商品名称不能为空")
    @Length(max = 50, message = "商品名称长度不能超过50")
    private String pluName;

    /**
     * 规格层级
     */
    @NotNull(message = "规格层级不能为空")
    @Range(min = 1, max = 3, message = "规格层级只能是1-3")
    private Integer skuLevel;

    /**
     * 规格1名称
     */
    @Length(max = 10, message = "规格1名称长度不能超过10")
    private String sku1Name;

    /**
     * 规格1存在的值
     */
    @Size(max = 10, message = "规格1存在的值不能超过10个")
    private List<String> sku1ValueList;

    /**
     * 规格2名称
     */
    @Length(max = 10, message = "规格2名称长度不能超过10")
    private String sku2Name;

    /**
     *
     */
    @Size(max = 10, message = "规格2存在的值不能超过10个")
    private List<String> sku2ValueList;

    /**
     * 规格3名称
     */
    @Length(max = 10, message = "规格3名称长度不能超过10")
    private String sku3Name;

    /**
     * 规格3值
     */
    @Size(max = 10, message = "规格3存在的值不能超过10个")
    private List<String> sku3ValueList;

    /**
     * 商品备注
     */
    @Length(max = 100, message = "商品备注长度不能超过100")
    private String pluRmk;

    /**
     * 商品类型
     */
    @NotNull(message = "商品类型不能为空")
    private PluTypeEnum pluType;

    /**
     * 品类id
     */
    @NotNull(message = "品类id不能为空")
    private Long cateId;

    /**
     * 是否上下架
     */
    private Boolean shelfTag;

    /**
     * 是否可以快递
     */
    private Boolean expressTag;

    /**
     * 是否可以自提
     */
    private Boolean selfTag;

    /**
     * 是否免运费
     */
    private Boolean freeExpressTag;


    /**
     * 顺序号
     */
    private Integer sno = 9999;
    @JsonDeserialize(using = PathDeserializer.class)
    private String pluIconImg;

    @Size(max = 10, message = "商品轮播图最多10张")
    @JsonDeserialize(contentUsing = PathDeserializer.class)
    private List<String> pluBannerImgList;

    private String descInfo;

    @NotEmpty(message = "规格不能为空")
    @Valid
    private List<PluSkuVo> listSku;
}
